package com.lvt.design.pattern.create.single.demo01;

import java.util.concurrent.atomic.AtomicLong;

/**
 * desc：class
 * 饿汉式
 * 非延迟加载，线程安全
 * <p>
 * 优点：没有加锁，执行效率会提高。
 * 缺点：类加载时就初始化，浪费内存。
 *
 * @author LT
 * @date 2022/11/30
 */
public class IdGenerator {

    /**
     * AtomicLong是一个Java并发库中提供的一个原子变量类型,
     * 它将一些线程不安全需要加锁的复合操作封装为了线程安全的原子操作，比如下面会用到的incrementAndGet().
     */
    private AtomicLong id = new AtomicLong(0);
    private static final IdGenerator instance = new IdGenerator();

    private IdGenerator() {
    }

    public static IdGenerator getInstance() {
        return instance;
    }

    public Long getId() {
        return id.incrementAndGet();
    }
}
